#include <common/asm.h>

/*在汇编文件中，你可以使用 #include 指令来包含一个头文件，*/ 
/*从而将头文件中的内容添加到当前的汇编文件中。*/ 
/*这允许你将一些通用的定义或宏定义添加到你的汇编代码中，*/ 
/*从而实现代码的重用和模块化。*/ 

.extern arm64_elX_to_el1
.extern boot_cpu_stack
.extern secondary_boot_flag
.extern clear_bss_flag
.extern init_c
/* 定义一个名为_start的函数 */
BEGIN_FUNC(_start)
	mrs	x8, mpidr_el1	/* 使用ARM64指令mrs，从系统保留寄存器中读取当前处理器ID（x8）和MPU保护级别（x0）*/
	and	x8, x8,	#0xFF   /* 将x8中的值按位与0xFF，结果存储在x8中。*/
	cbz	x8, primary		/* 如果x8中的值为0，则跳转到标签primary。*/

  /* hang all secondary processors before we intorduce multi-processors */
secondary_hang:
	bl secondary_hang

primary:

	/* Turn to el1 from other exception levels. */
	bl 	arm64_elX_to_el1

	/* Prepare stack pointer and jump to C. 准备栈指针并跳转到C代码*/
	adr 	x0, boot_cpu_stack /* 将boot_cpu_stack变量的值加载到寄存器x0中 */
	add 	x0, x0, #0x1000  /* 将x0中的值加上0x1000，结果存储在x0中。 */
	mov 	sp, x0  /* 将x0中的值设置为栈指针。 */
	/* 调用init_c函数 */
	bl 	init_c

	/* Should never be here */
	b	.
END_FUNC(_start)
